
/**
 * 常用工具
 * @author hejin
 * @date 2019-2-22
 */

/**
 * 是否是空数组
 * @author hejin
 * @date 2019-2-22
 */
export function isEmptyArray(arr) {
  return arr === undefined || !Array.isArray(arr) || arr.length === 0
};

/**
 * 数组去重
 * @author hejin
 * @date 2019-8-26
 * @example dedupe([1, 1, 2, 3]) // [1, 2, 3]
 */
function dedupe(array) {
  return Array.from(new Set(array));
}

/**
 * 是否空对象
 * @author hejin
 * @date 2019-2-22
 * @param obj
 * @returns {boolean}
 */
export function isEmptyObject(obj) {
  if (!obj || typeof obj !== 'object') {
    return true
  }
  let name
  for (name in obj) {
    return false
  }
  return true
}

/**
 * 分解对象成单属性对象数组
 * @author hejin
 * @date 2019-2-22
 * @param obj
 * @returns {Array}
 */
export function objectToArray(obj) {
  let arrObj = []
  Object.keys(obj).map(key => {
    if (obj[key] !== undefined && trim(obj[key])) {
      let o = {}
      o[key] = obj[key]
      arrObj.push(o)
    }
  })
  return arrObj
};

/**
 * 去左右空格
 * @param { string } s
 */
export function trim(s) {
  return typeof (s) !== 'string' ? s : s.replace(/(^\s*)|(\s*$)/g, '')
}

/**
 * 均衡获取 0 到 9 的随机整数
 * @param { number } 区间值
 */
export function getRandom(number = 10) {
  return Math.floor(Math.random() * number);
}



/**
 * 数组分割
 */
export function chunk(arr, length) {
  length = parseInt(length)
  var groups = []
  if (length <= 1 || arr.length < length) {
    groups.push(arr)
    return groups
  }
  var loop = Math.ceil(arr.length / length)
  for (var i = 0; i < loop; i++) {
    groups.push(arr.slice(length * i, length * (i + 1)))
  }
  return groups
};


/**
 * 生成一个唯一的uuid方法
 */
export function uuid(len, radix) {
  var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('')
  var uuid = []
  var i
  radix = radix || chars.length
  if (len) {
    // Compact form
    for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix]
  } else {
    // rfc4122, version 4 form
    var r

    // rfc4122 requires these characters
    uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-'
    uuid[14] = '4'

    // Fill in random data.  At i==19 set the high bits of clock sequence as
    // per rfc4122, sec. 4.1.5
    for (i = 0; i < 36; i++) {
      if (!uuid[i]) {
        r = 0 | Math.random() * 16
        uuid[i] = chars[(i === 19) ? (r & 0x3) | 0x8 : r]
      }
    }
  }
  return uuid.join('')
};


/**
 * 计算距离方法
 */
export function GetDistance(lat1, lng1, lat2, lng2) {
  var radLat1 = lat1 * Math.PI / 180.0
  var radLat2 = lat2 * Math.PI / 180.0
  var a = radLat1 - radLat2
  var b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0
  var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) +
    Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)))
  s = s * 6378.137
  s = Math.round(s * 10000) / 10000
  return s
}

/**
 * 判断对象值是否为空
 * @param obj
 * @returns {boolean}
 */
export function isEmptyObjectValue(obj) {
  let flag = true;
  if (!isEmptyObject(obj)) {
    let key;
    for (key in obj) {
      flag = flag && obj[key] == undefined;
      if (!flag) {
        return false;
      }
    }
  }
  return flag;
}

/**
 * 格式化点数据经纬度
 * @param info
 */
export function formatLngLat(info) {
  return { lng: Number(info['X']).toFixed(6), lat: Number(info['Y']).toFixed(6) }
}

/**
 * 检查经纬度是否合法
 * @param { Number } lon 经度
 * @param { Number } lat 纬度
 * @returns 
 */
export function checkLonLat(lon, lat) {
  return checkLon(lon) && checkLat(lat);
}
//检查经度是否合法
export function checkLon(lon) {
  var reg = /^-?((0|1?[0-8]?[0-9]?)(([.][0-9]{1,20})?)|180(([.][0]{1,20})?))$/;
  return reg.test(lon);
};
//检查纬度是否合法
export function checkLat(lat) {
  var reg = /^-?((0|[1-8]?[0-9]?)(([.][0-9]{1,20})?)|90(([.][0]{1,20})?))$/;
  return reg.test(lat);
};

/**
 * 深拷贝对象和数组
 * @param obj 对象
 * @returns {any} 拷贝的对象
 */
export const deepCloneObj = (obj) => {
  return JSON.parse(JSON.stringify(obj))
}



/**
 * 删除数组中的某一个对象
 * _arr:数组
 * _obj:需删除的对象
 */
export function removeOfAry(_arr, _obj, name) {
  var length = _arr.length;
  if (length === 0) return _arr;
  let index = indexOfAry(_arr, _obj, name);
  if (index !== -1) {
    _arr.splice(index, 1);
  }
  return _arr;
}

/**
 * 查找数组中的某一个对象的位置
 * _arr:数组
 * _obj:需查找的对象
 */
export function indexOfAry(_arr, _obj, name) {
  var len = _arr.length;
  if (len === 0) return -1;
  for (var i = 0; i < len; i++) {
    if (_arr[i][name] == _obj[name]) {
      return parseInt(i);
    }
  }
  return -1;
};


export function loadScript(url, callback) {
  const script = document.createElement('script');
  script.type = 'text/javascript';
  // 处理IE
  if (script.readyState) {
    script.onreadystatechange = function () {
      if (script.readyState === 'loaded' || script.readyState === 'complete') {
        script.onreadystatechange = null;
        callback();
      }
    }
  } else {
    // 处理其他浏览器的情况
    script.onload = function () { callback(); }
  }
  script.src = url;
  document.body.append(script);
}